﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace STRUCTURE_EXAMPLE.EXCERCISES
{
    public partial class frmCanculator : Form
    {
        public frmCanculator()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //1. Kiểm tra trạng thái điều khiển trên forms
            errorProvider1.Clear();
            if(string.IsNullOrEmpty(txtA.Text)){
                errorProvider1.SetError(txtA, "Yêu cầu bạn phải nhập vào số a!");
                txtA.Focus();
            }
            else if (string.IsNullOrEmpty(txtB.Text))
            {
                errorProvider1.SetError(txtB, "Yêu cầu bạn phải nhập vào số b!");
                txtB.Focus();
            }
            else if (string.IsNullOrEmpty(cboPhepToan.Text))
            {
                errorProvider1.SetError(cboPhepToan, "Yêu cầu bạn phải chọn phép toán!");
                cboPhepToan.Focus();
            }
            else {
                //txtKetQua.Text = txtA.Text + txtB.Text;  //Lỗi cộng chuỗi
                //double a = double.Parse(txtA.Text);
                //double b = double.Parse(txtB.Text);
                double a = 0;
                double b = 0;
                if(!double.TryParse(txtA.Text, out a)){
                    errorProvider1.SetError(txtA, "Giá trị bạn nhập ko hợp lệ!");
                    txtA.Focus();
                }
                else if (!double.TryParse(txtB.Text, out b))
                {
                    errorProvider1.SetError(txtB, "Giá trị bạn nhập ko hợp lệ!");
                    txtB.Focus();
                }
                else
                {
                    //2. Kiểm tra sự lựa chọn của người dùng
                    if(cboPhepToan.SelectedIndex == 0)
                        txtKetQua.Text = "a + b = " + (a + b);                    
                    else if (cboPhepToan.SelectedIndex == 1)                    
                        txtKetQua.Text = "a - b = " + (a - b);
                    else if (cboPhepToan.SelectedIndex == 2)
                        txtKetQua.Text = "a * b = " + (a * b);
                    else
                    {
                        if (a == 0 && b == 0)
                            txtKetQua.Text = "Result of....";
                        else if (a != 0 && b == 0)
                            txtKetQua.Text = "Can not ...";
                        else
                            txtKetQua.Text = "a/b = " + (a / b);
                    }
                }
            }
        }

        private void txtA_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Note: Sử dụng event này để kiểm tra giá trị người dùng nhập vào từ bàn phím
            //hoặc có thể lựa chọn TryParse()
            //e.Handled = true: Ko nhận vào giá trị sai đó
            //e.Handled = false: Đưa ra thông báo và vẫn nhận giá trị sai đó
            errorProvider1.Clear();
            if (!Char.IsNumber(e.KeyChar) && e.KeyChar != (Char)Keys.Back && 
                e.KeyChar != (Char)Keys.Delete)
            {
                errorProvider1.SetError(txtA, "Vui lòng nhập giá trị kiểu số");
                e.Handled = true;  
            }
        }

        private void txtB_KeyPress(object sender, KeyPressEventArgs e)
        {
            errorProvider1.Clear();
            if (!Char.IsNumber(e.KeyChar) 
                        && e.KeyChar != (Char)8 && e.KeyChar != (Char)46)
            {
                MessageBox.Show("Vui lòng nhập giá trị kiểu số");
                //errorProvider1.SetError(txtB, "Vui lòng nhập giá trị kiểu số");
                e.Handled = true;
            }
        }
    }
}
